package br.com.betioli.jme.games.sokobob.config;

import java.io.IOException;
import javax.microedition.lcdui.Image;

/**
 * Classe utilizada para definir as constantes que serão reutilizadas em toda a
 * aplicação. Centralizando-as aqui, permite uma melhor organização e facilita
 * a manuteção.
 * 
 * @author Alexandre Parra Betioli
 */
public abstract class GameConfig {

    /*
     * Define tamanho máximo da matriz que representa o mapa do jogo.
     */ 
    
    public static final int ROWS    = 11;
    public static final int COLUMNS = 11;
    
    /*
     * Constantes referentes aos tiles. Medido em pixels
     */ 
    
    public static final int TILE_WIDTH  = 16; 
    public static final int TILE_HEIGHT = 16;
    
    /*
     * Constantes referentes às sprites. Medido em pixels
     */ 
    
    public static final int SPRITE_STEP   = 16;
    public static final int SPRITE_WIDTH  = 16;
    public static final int SPRITE_HEIGHT = 16;
    
    /**
     * Milisegundos entre os frames da animação do jogo, utilizado para dar homogeneidade
     */    
    public static final int TIME_STEP     = 50; 
    
    /*
     * Define constantes para os caracteres que serão lidos do arquivo de mapa.
     * Caso o desenvolvedor deseje mudá-los, deverá fazer aqui e nos arquivos level.x
     */ 
    
    public static final char WALL_REF          = '#';
    public static final char TARGET_REF        = '.';
    public static final char BONE_REF          = '$';
    public static final char BOB_REF           = '@';
    public static final char FLOWERS_REF       = '^';
    public static final char GRASS_REF         = ' ';
    public static final char BOX_IN_TARGET_REF = '*';
    public static final char BOB_IN_TARGET_REF = '+';
    
    /*
     * Define indices das sprites no arquivo de imagem.
     * Para sprites os indices começam em 0.
     * 
     * É possível definir uma animação para as sprites, colocando em um array
     */  
    
    public static final int[] BOB_FRAME_INDEX  = {0, 1}; //BOB_FRAMES
    public static final int  BONE_FRAME_INDEX  = 4;    
    
    /*
     * Define indices dos tiles no arquivo de imagem.
     * Para tiles os indices começam em 1
     */  
    
    public static final char GRASS_TILE_INDEX   = 1;
    public static final int  TARGET_TILE_INDEX  = 2;    
    public static final int  WALL_TILE_INDEX    = 3;    
    public static final char FLOWERS_TILE_INDEX = 4;

    
    /**
     * Variável que armazena as imagens lidas do arquivo.
     */    
    public static Image IMAGES;    
    public static Image BOB_FRAMES;    

    static {
        try {
            IMAGES = Image.createImage( "/res/images/tiles.png" );
            BOB_FRAMES  = Image.createImage( "/res/images/bobFrames.png" );
        }
        catch( IOException e ) {
            IMAGES = null;
            BOB_FRAMES = null;
            e.printStackTrace();
        }
    }
}
